如果想使用除了Maven和Gradle之外的构建工具,你可能需要开发自己的插件。可执行jars需要遵循一个特定格式,并且一些实体需要以不压缩的方式写入(详情查看附录中的可执行jar格式章节)。
Spring Boot Maven和Gradle插件在实际生成jars的过程中会使用spring-boot-loader-tools
,如果需要,你也可以自由地使用该library。
使用org.springframework.boot.loader.tools.Repackager
可以将一个存在的存档重新打包,这样它就变成一个自包含的可执行存档。Repackager
类需要提供单一的构造器参数,该参数指向一个存在的jar或war包。你可以使用两个可用的repackage()
方法中的一个来替换原始的文件或写入新的目标,在repackager运行前还可以指定各种配置。
当重新打包一个存档时,你可以使用org.springframework.boot.loader.tools.Libraries
接口来包含对依赖文件的引用。在这里我们不提供任何该Libraries
接口的具体实现,因为它们通常跟具体的构建系统相关。
如果存档已经包含libraries,你可以使用Libraries.NONE
。
如果你没有使用Repackager.setMainClass()
指定一个main类,该repackager将使用ASM去读取class文件,然后尝试查找一个合适的,具有public static void main(String[] args)
方法的类。如果发现多个候选者,将会抛出异常。
这是一个典型的repackage示例:
Repackager repackager = new Repackager(sourceJarFile);
repackager.setBackupSource(false);
repackager.repackage(new Libraries() {
@Override
public void doWithLibraries(LibraryCallback callback) throws IOException {
// Build system specific implementation, callback for each dependency
// callback.library(new Library(nestedFile, LibraryScope.COMPILE));
}
});